perm filename PFAIL.FAI[PAG,LCS]20 blob
sn#598964 filedate 1981-07-12 generic text, type T, neo UTF8
00100 TITLE PFAIL; ********* OCT 78 *********
00200 INTERNAL PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT
00300 ;; INTERNAL PUTEXT,EXTOUT,GETEXT,EXTIN,FINEXT,INMUS
00400 ; ENTRY LOOKF,LOOKX,LOOK,SHFTQ,SORT2,NORH,FNDEND,MINMAX
00500 ENTRY LOOKF,LOOKX,LOOK
00600 ENTRY IFIX,FLOAT
00700 ;; ENTRY IFIX,FLOAT,RCURVE
00800 ;; ENTRY PFIBX,PFIB,RLOOP,BLTEM,IFIX,FLOAT
00900 ;; ENTRY GETPTS,MOVIT,EXTEN,DBAR,QRN,SORT,SHIFT,SHFT1,SHFT0
01100 ;; ENTRY EXCHG,EXCH,SHRNK,EXPND,CLFNUM
01200 ;; ENTRY PSHFT,ADRST,STAFF,RIGHT,RESTS,EXCHG,EXCH,SHRNK,EXPND,CLFNUM
01400 EXTERNAL .COMM.,XRN,KJY,PTR,POSI,AMOD,KNR,NNP,PX,XXX,Q,SF,LLL
01500 EXTERNAL RCLF,STF,PTMOVE,IPG,JN,RCLF,MNX,ALOG,ENDL
01600 DEFINE ERROR (MSG)
01700 < JSA 16,.ERROR
01800 JUMP [ASCIZ/MSG/
01900 ]
02000 >
02100
02200 .ERROR: 0
02300 OUTSTR [ASCIZ/?
02400 /] ;MAKE SURE HE CAN SEE HIS ERROR
02500 OUTSTR @(16) ;OUTPUT ERROR MESSAGE
02600 CALLI 1,12 ;LET USER CONTINUE
02700 JRA 16,1(16)
02800
02900 CH←13
03000
03100 REGS: BLOCK 20
03200
03300 ;LOOK(<FILE>) FOR NO EXT., LOOKD() FOR .DAT, LOOKF() FOR .MS
03400 LOOKF: 0
03500 MOVSI 0,'MS '
03600 JRST LOOK1
03700 LOOKX: 0
03800 MOVE 0,@1(16)
03900 MOVEM 0,FILNAM
04000 JSA 16, INTFIQ
04100 MOVE 0,DIR
04200 JRST LOOK1
04300 LOOK: 0
04400 MOVEI 0,0
04500 LOOK1: MOVEM 0,DIR+1
04600 MOVE 0,@(16)
04700 MOVEM 0,FILNAM
04800 JSA 16, INTFIQ
04900 SETZM DIR+2
05000 SETZM DIR+3
05100 LOOKUP CH,DIR
05200 TDZA 0,0
05300 MOVNI 0,1
05400 JRA 16,1(16)
05500
05600 INTFIQ: 0 ;INITS DSK FOR INPUT
05700 MOVEI REGS
05800 BLT REGS+3
05900 INIT CH,17
06000 SIXBIT/DSK/
06100 0
06200 HALT .-3
06300 ; ERROR <CAN'T INIT DSK!>
06400 PUSHJ 17,INTF4
06500 JRA 16,0(16)
06600
06700 INTF4: MOVE 0,FILNAM#
06800 MOVEM 0,FN#
06900 MOVE 1,[POINT 7,FN]
07000 INTF3: MOVE 2,[POINT 6,DIR]
07100 SETZM DIR
07200 MOVEI 3,5
07300 INTF1: ILDB 0,1
07400 CAIN 0," "
07500 JRST INTF2
07600 SUBI 0,40
07700 IDPB 0,2
07800 SOJG 3,INTF1
07900 INTF2: HRLZI REGS
08000 BLT 4
08100 POPJ 17,
08200
08300 DIR: BLOCK 4
08400
08500 ;SHFTQ: 0 ;CALL SHFTQ(R)
08600 ; MOVE JN+1
08700 ; SOS
08800 ; SETZ 1,
08900 ; MOVE 3,@(16) ;R
09000 ;SHQ: MOVE 2,XRN(1)
09100 ; FADRM 3,Q-1(2)
09200 ; CAMGE 1,0
09300 ; AOJA 1,SHQ
09400 ; JRA 16,1(16)
09500
09600 ;SORT2: 0 ;SUBROUTINE SORT2(RPOS,M)
09700 ; MOVEI 2,2 ;DIMENSION RPOS(2,200)
09800 ;SO3: MOVE 6,2 ;(K=L HERE)
09900 ; SETO 11, ;L=2
10000 ; HRRZI 3,@(16) ;3 J=-1
10100 ; MOVE 4,2 ;RX=RPOS(1,L-1)
10200 ; SUBI 4,1 ;L-1
10300 ; IMULI 4,2
10400 ; ADDI 4,(3)
10500 ; MOVE 5,-2(4) ;RX
10600 ;SO2: MOVE 7,6 ; DO 2 K=L,M
10700 ; ;IF(RPOS(1,K).GE.RX)GO TO 2
10800 ; IMULI 7,2 ;IF(RPOS(1,K).GE.RX)GO TO 2
10900 ; ADDI 7,(3)
11000 ; CAMG 5,-2(7)
11100 ; JRST SO1 ; CONTINUE
11200 ; MOVE 5,-2(7) ; RX=RPOS(1,K)
11300 ;;;C WHY WERE ALL THE RX'S JX ????? 9/6/73
11400 ; MOVE 11,6 ;J=K
11500 ;SO1: CAMGE 6,@1(16) ;2 CONTINUE
11600 ; AOJA 6,SO2
11700 ; JUMPL 11,SO4 ;IF(J)GO TO 4
11800 ; MOVE 12,2 ;K=L-1
11900 ; SOS 12
12000 ; IMULI 12,2 ;(K*2)
12100 ; ADD 12,3 ;CALL EXCH(RPOS(1,K),RPOS(1,J))
12200 ; MOVE 10,-2(12)
12300 ; IMULI 11,2
12400 ; ADD 11,3
12500 ; EXCH 10,-2(11)
12600 ; MOVEM 10,-2(12)
12700 ; MOVE 10,-1(12) ;CALL EXCH(RPOS(2,K),RPOS(2,J))
12800 ; EXCH 10,-1(11)
12900 ; MOVEM 10,-1(12)
13000 ;SO4: CAMGE 2,@1(16) ;4 L=L+1
13100 ; AOJA 2,SO3 ;IF(L.LE.M)GO TO 3
13200 ; JRA 16,2(16) ;END
13300
13400 ;NORH: 0 ;FUNCTION NORH(KK)
13500 ; MOVE 15,@1(16); ;NOW**** FUNCTION NORH(KK,K)
13600 ; MOVE 1,XRN+=499(15) ;FIND VALUE IN NN ARRAY IN DO LOOP.
13700 ; MOVEM 1,@(16); ; ;KK=NN(K)
13800 ; SETZ 0,
13900 ; JUMPLE 1,NOR
14000 ; CAILE 1,2; ; ;NORH=-1 IF KK≤0, >18, NOT 1,2,4,17.
14100 ; CAIN 1,4
14200 ; JRA 16,1(16)
14300 ; CAIE 1,=18; ; ;USED IN RESPC.F4
14400 ; CAIN 1,=17
14500 ; JRA 16,1(16)
14600 ;NOR: SETO 0,
14700 ; JRA 16,1(16)
14800
14900 ;FNDEND: 0 ;CALL FNDEND(R)
15000 ; SETZ 1,
15100 ;FA: MOVE 2,XRN+=500(1) ;NN(K)
15200 ; JUMPLE 2,FB
15300 ; CAIG 2,3
15400 ; JRST FC
15500 ; CAIE 2,=17
15600 ; CAIN 2,=18
15700 ; SKIPA
15800 ;FB: AOJA 1,FA ;ASSUMES IT WILL ALWAYS END PROPERLY!!!
15900 ;FC: MOVN 2,XRN(1) ; MM(K)
16000 ; FADR 2,[2.0]
16100 ; FADR 2,ENDL ; ;+ENDLN
16200 ; MOVEM 2,@(16)
16300 ; JRA 16,1(16)
16400
16500 ;MINMAX: 0 ; SUBROUTINE MINMAX(JRN)
16600 ; MOVEI 1,@(16) ;COMMON /MNX/MIN,MAX,JT DIM. JRN(1)
16700 ; MOVE 0,(1); ;GET FIRST VALUE OF CURRENT JRN ARRAY
16800 ; MOVE 3,
16900 ; MOVEI 2,2; ;; MIN=10000
17000 ;MM: CAMLE 0,1(1) ; MAX=0
17100 ; MOVE 0,1(1) ;; DO 107 K=1,JT
17200 ; CAMGE 3,1(1) ; ;; NN=JRN(K)
17300 ; MOVE 3,1(1) ; ;; IF(NN.LT.MIN)MIN=NN
17400 ; AOJ 1,
17500 ; CAMGE 2,MNX+2
17600 ; AOJA 2,MM; ;107; IF(NN.GT.MAX)MAX=NN
17700 ; MOVEM 0,MNX; ;; END
17800 ; MOVEM 3,MNX+1
17900 ; JRA 16,1(16)
18000
18100 ;PFIBX: 0 ;DATA FIB/0.618/, RFIB/-.382/,ALG/0.30103/
18200 ; ; ;100; ACCEPT 10,A 10; FORMAT(F)
18300 ; MOVE 12,@(16); ; ;PFIBX=14
18400 ; MOVE 13,[14.0]; ; ;IF(A.EQ.1)GO TO 20
18500 ; CAMN 12,[1.0]; ; ;Z=FIB
18600 ; JRST PFX; ; ;IF(A.LT.1)Z=RFIB
18700 ; JSA 16,ALOG; ; ;RH=ABS(ALOG(A)/ALOG(2.0))
18800 ; JUMP 12
18900 ; FDVR 0,[0.6931472]
19000 ; MOVM 11,0
19100 ; MOVE 10,[0.618]
19200 ; SKIPG ; ; ;L=RH
19300 ; MOVN 10,[0.382]; ; ;IF(L.EQ.0)GO TO 4
19400 ; KIFIX 7,11
19500 ; MOVE 6,7; ; ;SAVE L FOR LATER
19600 ; JUMPE 6,PFZ
19700 ;PF: MOVE 2,13 ; DO 3 K=1,L
19800 ; FMPR 2,10; ; ;3; PFIBX=PFIBX+PFIBX*Z
19900 ; FADR 13,2
20000 ; SOJG 6,PF
20100 ;PFZ: FLTR 7,7 ;4 RH=RH-L
20200 ; FSBR 11,7; ; ;IF(RH.EQ.0)GO TO 20
20300 ; JUMPE 11,PFX;
20400 ; MOVE 2,13
20500 ; FMPR 2,10
20600 ; FMPR 2,11; ; ;PFIBX=PFIBX+PFIBX*Z*RH
20700 ; FADR 13,2
20800 ;PFX: MOVE 0,13 ;SEND BACK THE RESULT
20900 ; JRA 16,1(16)
21000
21100 ;PFIB: 0 ;FUNCTION PFIB(P) PSEUDO-FIBONACCI RHYTHM SPACER
21200 ; MOVN 0,@(16); ;PFIB=(P+(.125-P)*(.8+.01*P))*50
21300 ; FADR 0,[0.125]; ;END
21400 ; MOVE 1,@(16)
21500 ; FMPR 1,[0.02]
21600 ; FADR 1,[0.8]
21700 ; FMPR 0,1
21800 ; FADR 0,@(16)
21900 ; FMPR 0,[50.0]
22000 ; JRA 16,1(16)
22100
22200 ;RLOOP: 0 ;CALL RLOOP(A,B,K)
22300 ; HRLI 1,@1(16) ;DIMENSION A(1),B(1) -- SOURCE
22400 ; HRRI 1,@(16) ;DO 1 J=1,K -- DESTINATION
22500 ; MOVEI 2,@(16) ;1 A(J)=B(J) -- WORD COUNT
22600 ; ADD 2,@2(16) ;LOC OF ARRAY A + WDCNT.
22700 ; BLT 1,-1(2)
22800 ; JRA 16,3(16)
22900
23000 ;BLTEM: 0
23100 ; HRLI 1,PX ;KWDS(...)=KPN(...) PX IS LOC. OF KPN ARRAY
23200 ; HRRI 1,PTR ;RIGHT HALF IS LOC OF KWDS ARRAY
23300 ; MOVE 2,RCLF+3 ;GET NUM. OF ITEMS (RCLF+3=ITEM)
23400 ; BLT 1,PTR(2) ; PTR(2) IS WD CNT. (ITEM+1)
23500 ; HRLI 1,Q ;RN(...)=Q(...)
23600 ; HRRI 1,XRN
23700 ; MOVE 2,POSI+=9 ;THIS IS JPQ, NUM OF WDS.
23800 ; BLT 1,XRN-1(2)
23900 ; JRA 16,0(16)
24000
24100 IFIX: 0
24200 KIFIX 0,@(16)
24300 JRA 16,1(16)
24400 FLOAT: 0
24500 FLTR 0,@(16)
24600 JRA 16,1(16)
24700
24800 K←15↔J←14↔ M←2↔ R2←5↔ X←6↔ L←4↔ R←7↔ A←11↔RY←3↔RZ←13↔JJ2←12
24900
25000 ; SUBROUTINE GETPTS
25100 ; COMMON/KNR/N(500) /NNP/NP(500)
25200 ;XXX COMMON/XRN/RN(4000) /KJY/ K,J
25300 ; COMMON R2,JA,CENTR,J2,RJQ(18),RX6,JR,L,RDIS
25400 ;XXX 1/PTR/PWDS(250),ITEM,LL,I,IX
25500 ; EQUIVALENCE (R4,RJQ(2)),(R5,RJQ(3)),(R11,RJQ(9))
25600 ; 1,(R6,RJQ(4))
25700
25800 ;GETPTS: 0 ;CALL GETPTS(N,RN,PWDS)
25900 ; SETZ J, ; J=0
26000 ; SETZ; K,; ;; K=0
26100 ; MOVE ; JJ2,POSI+=8
26200 ; KIFIX; R2,.COMM.; ;GET THE STAFF NUM. (NEG= ALL IN THIS PROG.)
26300 ; SETZ; X,
26400 ; MOVEI ; M,@2(16);; DO 1 M=1,ITEM
26500 ;G1: AOJ X,
26600 ; MOVE;; L,(M)
26700 ; MOVEI ; R,@1(16); ;L=PWDS(M)
26800 ; ADDI; R,(L); ; ;IF(RTLINE(L))GO TO 1
26900
27000 ; JUMPL R2,G9; ; ;NEG R2=ALL STAVES
27100 ; KIFIX A,1(R); ; ;CHECK NOW FOR CORRECT STAFF
27200 ; CAME R2,A
27300 ; JRST GX; ; ; ;NOT THE ONE.
27400
27500 ;* MOVE 1,1(R) ;RN(L+2)
27600 ;;NEVER USED IN 'PARTS'- CAML R2,[=5.0]
27700 ;; JRST GZ
27800 ;PT MOVE A,1(R)
27900 ;; SKIPE IPG ;IF(IPG)GO TO GSTF
28000 ;; JRST GSTF
28100 ;; KIFIX A,A
28200 ;; FLTR A,A ;STAFF=IFIX(STAFF) DROPS DECIS.
28300 ;PT SKIPL IPG
28400 ;PT JRST G9
28500 ;PTGSTF: CAME R2,A ;FINDS STAFF #
28600 ;PT JRST GX
28700 ;;GZ: MOVE A,.COMM.+7 ;RY=RN(L+1)
28800 ;; JUMPLE A,G9 ;F(R6.LE.0)GO TO 9
28900 ;; CAME A,(R) ;IF(R6.NE.RY)GO TO 1
29000 ;; JRST GX
29100 ; CHECK CODE NUM
29200 ;G9: MOVE A,2(R)
29300 ; CAMG; A,.COMM.+6; ;R5 9; IF(OUTLIM(R4,R5,RN(L+3)))GO TO 2
29400 ; CAMGE; A,.COMM.+5; ;R4
29500 ; JRST; G2
29600
29700 ; SKIPG; JJ2
29800 ; MOVE; JJ2,X
29900 ; MOVE; .COMM.+=8; ;IF(IPG)RN(L+2)=R7
30000 ; AOJ; J,
30100 ; IN LIMITS?
30200 ;; MOVEI A,XRN+=2498 ;J=J+1
30300 ;; MOVEI A,KNR-1
30400 ;; ADDI A,(J)
30500 ; MOVEI; 0,(L)
30600 ; AOJ; K,; ; ;K=K+1
30700 ; MOVEM; 0,NNP-1(K)
30800 ; ADDI; 0,3; ; ;N(J)=L+3
30900 ; MOVEM; 0,KNR-1(J)
31000 ; NP IS FOR USE IN JUSTIFY ROUTINE
31100 ;G2: KIFIX RY,(R) ;2 IF(RY.LT.4)GO TO 1
31200 ; CAIN; RY,2 ; ;IF(RY.EQ.2)GO TO GRST
31300 ; JRST GRST
31400 ; CAIGE; RY,4
31500 ; JRST; GX
31600 ; MOVE; RZ,-1(R); ;RZ=RN(L) WD CNT
31700 ; CAIE; RY,=44; ;CODE 4 IS SOMETIMES =44
31800 ; JRST .+4
31900 ; CAMG RZ,[2.0]; ;IF(RZ.LE.2)THEN IT'S AN CODE 44 BAR LINE.
32000 ; JRST GX
32100 ; JRST; G5; ; ;FOUND A LINE
32200 ; CAILE; RY,7
32300 ; JRST; GX; ; ;IF(RY.GT.7)GO TO 1
32400 ; TWO-ENDED ITEM?
32500 ;; CAMN RY,[=4.0] ;GO TO(4,5,6,7),IFIX(RY)-3
32600 ;; JRST G4
32700 ;; CAMN RY,[=5.0]
32800 ;; JRST G5
32900 ;; CAMN RY,[=6.0]
33000 ;; JRST G6
33100 ;; CAMG RZ,[=4.0] ;4 IF(RZ.GT.2)GO TO 5
33200 ;; JRST G5 ; THERE IS A TRILL WIGGLE
33300 ;; JRST GX ;GO TO 1 -- NO WIGGLE (P7≠0)
33400 ; XCT TBL-4(RY); ; NEXT REPLACES THE ABOVE.
33500 ; JRST G5
33600 ; JRST GX
33700 ;TBL: JRST G4
33800 ; JRST G5
33900 ; JRST G6
34000 ; CAMG RZ,[4.0]
34100
34200 ;G4: CAMG RZ,[=3.0] ;7 IF(RZ.GT.3)GO TO 5
34300 ; JRST; GX
34400 ; JRST; G5; ; ;GO TO 1
34500 ;GRST: MOVE RZ,-1(R) ;FOR 'CENTERED' RESTS
34600 ; JRST G8
34700 ;G6: CAMGE RZ,[=8.0] ;6 IF(RZ.LT.8)GO TO 8
34800 ; JRST; G8
34900 ; SKIPL 6(R); ;IF(R7)GO TO 8
35000 ; SKIPN =9(R); ;IF(R10.EQ.0)GO TO 8
35100 ; JRST; G8
35200 ;; MOVE A,7(R) ; IF(OUTLIM(R4,R5,RN(L+8)))GO TO 8
35300 ;; JUMPE A,G5 ;IF(R8.EQ.0)GO TO G5(MOVE ONLY P3,6)
35400 ; SKIPG A,7(R); ; ;IGNORE P8 IF IT IS 0 OR -
35500 ; JRST G8
35600 ; CAMG; A,.COMM.+6
35700 ; CAMGE; A,.COMM.+5
35800 ; JRST; G8
35900 ; CAMLE JJ2,X
36000 ; MOVE; JJ2,X
36100 ; AOJ; J, ; IN LIMITS?
36200 ; MOVEI; 0,=8(L); ; ;J=J+1
36300 ; MOVEM 0,KNR-1(J)
36400 ;G8: CAML RZ,[=7.0] ;8 IF(RZ.LT.7)GO TO 5
36500 ; SKIPG A,8(R); ; R9; IF(R9.LE.0)GO TO G5
36600 ; JRST G5
36700 ; CAIE RY,2; ;IF(RY.EQ.2)GO TO GRST2 (NEW CENTERED RESTS)
36800 ; SKIPE 7(R); ; R8
36900 ; JRST GRST2
37000 ; SKIPL 6(R); ; R7
37100 ; JRST G5
37200 ;GRST2: CAMG A,.COMM.+6
37300 ; CAMGE; A,.COMM.+5; ;R4
37400 ; JRST; G5
37500
37600 ; CAMLE JJ2,X
37700 ; MOVE; JJ2,X
37800 ; AOJ; J,; ; ;J=J+1 ; IN LIMITS?
37900 ; MOVEI; 0,=9(L)
38000 ; MOVEM 0,KNR-1(J); ;N(J)=L+9
38100 ;G5: CAIN RY,2 ;IF(RY.EQ.2)GO TO GX
38200 ; JRST GX
38300 ; MOVE; A,5(R)
38400 ; CAMG; A,.COMM.+6
38500 ; CAMGE; A,.COMM.+5; ;R4
38600 ; JRST; GX
38700
38800 ; CAMLE JJ2,X
38900 ; MOVE; JJ2,X
39000 ; AOJ; J, ; IN LIMITS?
39100 ;| MOVEI A,XRN+=2498 ;J=J+1
39200 ;; ADDI A,(J)
39300 ; MOVEI; 0,6(L) ;5; IF(OUTLIM(R4,R5,RN(L+6)))GO TO 1
39400 ;; ADDI 0,6 ;N(J)=L+6
39500 ; MOVEM; 0,KNR-1(J)
39600 ;GX: CAMGE X,LLL ;1 CONTINUE
39700 ; AOJA; M,G1
39800 ; MOVEM; JJ2,POSI+=8
39900 ; MOVEM; J,KJY+1
40000 ; MOVEM; K,KJY
40100 ; JRA; 16,3(16)
40200
40300 ; SUBROUTINE MOVIT(RN,NP,R4,R5,R8,R9)
40400 ; DIMENSION NP(1),RN(1)
40500 ; COMMON /KJY/ DONT,J
40600 ;MOVIT: 0 ;RDIS=(R9-R8)/(R5-R4)
40700 ; MOVE R,@5(16)
40800 ; FSBR R,@4(16)
40900 ; MOVE RY,@3(16)
41000 ; FSBR RY,@2(16)
41100 ; FDVR R,RY
41200 ;; MOVEI L,XRN+=2499 ; DO 1 K=1,J
41300 ; MOVEI L,@1(16) ; GET NP ARRAY LOC
41400 ; SETZ K,
41500 ; MOVE 0,@5(16) ; SET UP R9
41600 ;;;M1: MOVE X,L ; L=NP(K)
41700 ;M1: MOVEI R2,@(16) ;RA=RN(L)
41800 ; ADD R2,(L)
41900 ; MOVEI RZ,(R2)
42000 ; MOVE R2,-1(R2)
42100 ; CAML R2,@2(16) ;IF(OUTLIM(R4,R5,RA))GO TO 1
42200 ; CAMLE R2,@3(16)
42300 ; JRST MX
42400 ; JUMPE 0,M2 ;IF(R9.NE.0)RA=(RA-R4)*RDIS
42500 ; FSBR R2,@2(16)
42600 ; FMPR R2,R
42700 ;M2: FADR R2,@4(16) ; RN(L)=R8+RA
42800 ; MOVEM R2,-1(RZ)
42900 ;MX: AOJ K, ;1 CONTINUE
43000 ; CAMGE K,KJY+1
43100 ; AOJA L,M1
43200 ; JRA 16,6(16)
43300 ;
43400 ;
43500 ;EXTEN: 0 ;FUNCTION EXTEN(X)
43600 ; HRRM 16,.+2
43700 ; JSA 16,AMOD ;EXTEN=AMOD(X,1.)*10.
43800 ; JUMP @0
43900 ; JUMP [=1.0]
44000 ; FMPR [=10.0]
44100 ; JRA 16,1(16)
44200 ;
44300 ;DBAR: 0 ; CALL DBAR(K,ITEM,J)
44400 ; MOVE 4,@2(16) ; -J-RR=RN(J+3)
44500 ;;PT SKIPL IPG ;IF(IPG.GE.0)LEAVE BAR ALONE!
44600 ;;;; JRST DB1
44700 ;;PT KIFIX 2,XRN+3(4) ; -RN(J+4)-
44800 ; ;KZ=RN(J+4)/100.
44900 ;;PT IMULI 2,=100 ;RN(J+4)=1.+KZ*100.
45000 ;
45100 ;DB1: MOVE 1,@1(16)
45200 ; MOVE 7,XRN+2(4) ; -RR-
45300 ; MOVE 4,@(16) ; DO 82 KY=K+1,ITEM
45400 ;DB: MOVE 5,PTR(4) ;KZ=PWDS(KY)
45500 ; MOVE 6,XRN(5) ; IF(RN(KZ+1).NE.4)GO TO 82
45600 ; CAME 6,[4.0]
45700 ; JRST DB82
45800 ; MOVE 6,XRN-1(5) ;IF(RN(KZ).GT.3)GO TO 82
45900 ; CAMLE 6,[3.0]
46000 ; JRST DB82
46100 ;;;C AVOIDS DUPLICATE BARS.
46200 ; MOVN 6,XRN+2(5) ;IF(ABS(RR-RN(KZ+3)).GT..5)GO TO 82
46300 ; FADR 6,7
46400 ; SKIPGE 6
46500 ; MOVNS 6
46600 ; CAMLE 6,[0.5]
46700 ; JRST DB82
46800 ; MOVE 6,[99.0] ;RN(KZ+2)=99
46900 ; MOVEM 6,XRN+1(5)
47000 ; SETZM XRN(5) ;RN(KZ+1)=0
47100 ;DB82: AOJ 4, ;82 CONTINUE
47200 ; CAIGE 4,(1)
47300 ; JRST DB
47400 ; MOVEM 7,DBX# ; RR SAVES IT FOR ADRST ROUTINE
47500 ; JRA 16,3(16)
47600 ;
47700 ;QRN: 0 ; CALL QRN(J,XWDS,K)
47800 ; MOVE 4,@(16) ;810 JA=PWDS(K+1)
47900 ;
48000 ;PN4: MOVE 5,@2(16) ; DO 7 KY=J,JA-1
48100 ; MOVE 5,PTR(5) ; - JA -
48200 ; MOVE 6,XXX ; PN(LK)=RN(KY)
48300 ; MOVEI 1,(6) ; SAVE IT FOR A LITTLE LATER
48400 ;PN: MOVE 7,XRN-1(4) ;7 LK=LK+1
48500 ; MOVEM 7,Q-1(6)
48600 ; AOJ 4, ;AC4 IS KY, AC6 IS LK
48700 ; CAME 4,5
48800 ; AOJA 6,PN
48900 ; SKIPN SF ;IF(KL.EQ.0)GO TO PN5
49000 ; JRST PN5
49100 ; MOVE [1.0] ;PUT A 1.0 AS RHYTHM FOR REST OR NOTE
49200 ; ADD 6,SF
49300 ; MOVEM Q-1(6) ;PUT IT IN PARAM 7 OR 9
49400 ;PN5: AOJ 6,
49500 ; MOVE 2,.COMM.+6 ; IF(R5)GO TO 6666
49600 ; JUMPL 2,PN2 ; IF(PN(J).EQ.2)LK=LK+1
49700 ; MOVEM 2,Q+4(1) ; PN(J+5)=R5
49800 ; MOVE 3,[3.0]
49900 ;PN3: MOVE 4,3 ; IS THE WDCNT BIG ENOUGH?
50000 ; FSBR 4,Q-1(1)
50100 ; KIFIX 4,4
50200 ; ADD 6,4 ; UPDATE THE MAIN COUNTER
50300 ;;PT??? SETZM Q+3(1) ; ZERO PARAM 4, THE VERTICAL POS. PN(J+4)
50400 ; MOVEM 3,Q-1(1) ; PN(J)=3 OR 4
50500 ; JRST PN1
50600 ;PN2: MOVE 3,RCLF ; IF(R.NE.17)GO TO
50700 ; CAME 3,[17.0]
50800 ; JRST PN1
50900 ; MOVE 3,[4.0] ; THE WDCNT
51000 ; MOVE 2,RCLF+1 ; CLEF #
51100 ; MOVEM 2,Q+5(1) ;PN(J+6)=CLEF
51200 ; JRST PN3
51300 ;PN1: MOVEM 6,XXX ;LK=LK+1 (6666↑)
51400 ; MOVE 4,LLL ; -L- XWDS(L)=LK
51500 ; ADDI 4,@1(16) ; ADDR. XWDS ARRAY
51600 ; MOVEM 6,(4)
51700 ; AOS LLL ;L=L+1
51800 ; JRA 16,3(16)
51900 ;SORT: 0 ; CALL SORT(XWDS)
52000 ; MOVE 11,LLL ; L
52100 ; SOJ 11,
52200 ; MOVEI 4,1 ;I=1
52300 ; MOVE 0,[16.0]
52400 ; MOVE 1,[8.0]
52500 ; SETZ 5, ; -K- DO 243 K=1,L-1
52600 ;S2: MOVEI 7,@(16) ; ADDR. OF XWDS
52700 ; ADDI 7,(5) ;LB=XWDS(K)+1
52800 ; MOVE 6,(7)
52900 ;;; MOVE 10,Q(6) ;IF(PN(LB).NE.16)GO TO 243
53000 ;;; CAME 10,[16.0]
53100 ; CAME 0,Q(6)
53200 ; JRST S243
53300 ;;; MOVE 10,Q-1(6) ;IF(PN(LB-1).LT.8)GO TO 243
53400 ;;; CAMGE 10,[8.0]
53500 ; CAMLE 1,Q-1(6)
53600 ;
53700 ; JRST S243
53800 ; MOVE 10,-1(7) ;JL=XWDS(K-1)
53900 ; MOVE 10,Q+2(10)
54000 ; MOVEM 10,Q+2(6) ;244 PN(LB+2)=PN(JL+3)
54100 ;S243: AOJ 5,
54200 ; CAME 5,11 ; -L-1
54300 ; JRST S2 ; 243 CONTINUE
54400 ;
54500 ;;; PUTS CONTINUATION OF TEXT IMMEDIATELY AFTER PREV. POS.
54600 ;;; FOR SPACING PROBLEMS BELOW.
54700 ; MOVEI 11,1 ;M=2
54800 ; SETZ 12, ;J=1
54900 ;S24: MOVE 13,[100000.0] ;24 RA=100000.;; POSITION
55000 ; MOVE 1,LLL ; L
55100 ; SOJ 1,
55200 ; SETZ 14, ; -K-
55300 ;S21: MOVEI 2,@(16) ;DO 21 K=1,L-1 - ADDR. OF XWDS -
55400 ; ADDI 2,(14) ;JL=XWDS(K)+3
55500 ; MOVE 2,(2)
55600 ; MOVE 3,Q+2(2) ;R=PN(JL)
55700 ; CAMN 3,[100000.0]
55800 ; JRST SX21 ;IF(R.EQ.100000)GO TO 21
55900 ; MOVE 3 ;241 IF(ABS(R-RA).GT..1)GO TO 240
56000 ; FSBR 13
56100 ; SKIPGE
56200 ; MOVNS
56300 ; CAMLE 0,[0.1]
56400 ; JRST S240
56500 ; MOVEM 13,Q+2(2) ; ((R=RA)) PN(JL)=R
56600 ; JRST SX21 ;GO TO 21;; PUT IN HERE MULTI-VOICE TRAP SOMEDAY
56700 ;S240: CAMLE 3,13 ;240 IF(R.GT.RA)GO TO 21
56800 ; JRST SX21 ;; LINES THEM UP
56900 ; MOVEI 4,(2) ; SAVES JL (I=K)
57000 ; MOVE 13,3 ; RA=R ;21 CONTINUE
57100 ;SX21: AOJ 14, ; -K-¬
57200 ; CAME 14,1
57300 ; JRST S21
57400 ; CAMN 13,[100000.0] ;IF(RA.EQ.100000)GO TO 23
57500 ; JRA 16,1(16); JUMP IF ALL SORTED
57600 ;;;;; MOVE 10,(16) ;242 JL=XWDS(I)
57700 ; MOVEI 15,(4) ;LA=JL
57800 ; KIFIX 1,Q-1(4) ;N=PN(JL)+3
57900 ; ADDI 1,3 ; N
58000 ; MOVE 2,PTR-1(11) ; PWDS(M)=PWDS(M-1)+N
58100 ; ADDI 2,(1)
58200 ; MOVEM 2,PTR(11)
58300 ; AOJ 11, ; M=M+1
58400 ;;; FIXX(1) ;DO 22 K=J,J+N-1
58500 ; ADDI 1,(12) ; -J+N-
58600 ;S22: MOVE 2,Q-1(4) ; RN(K)=PN(JL)
58700 ; MOVEM 2,XRN(12)
58800 ; AOJ 12,
58900 ; CAME 12,1
59000 ; AOJA 4,S22 ;22 JL=JL+1
59100 ; AOJ 4, ; (JL=JL+1)
59200 ; MOVE 2,[100000.0] ; PN(LA+3)=100000
59300 ; MOVEM 2,Q+2(15) ; PUT IT ASIDE
59400 ; JRST S24 ; GO TO 24
59500 ;
59600 ;SHIFT: 0 ; CALL SHIFT
59700 ; SOS LLL ; (IN MAIN. L=L-1)
59800 ; SETZ 2, ;K=1
59900 ; SETZ 3, ;L=1
60000 ; SETO 4, ;LK=1 ((LL=0))
60100 ;SH221: MOVE 5,PX(2) ;221 IF(Q(IFIX(PN(K))+1))GO TO 321
60200 ; MOVE 6,Q(5)
60300 ; JUMPL 6,SH321
60400 ; MOVE 7,PX+1(2)
60500 ;SH421: MOVE 6,Q-1(5) ;DO 421 KL=IFIX(PN(K)),IFIX(PN(K+1))-1
60600 ; MOVEM 6,Q(3); ; ((LL=LL+1))421; Q(LL)=Q(KL)
60700 ; AOJ 5,
60800 ; CAMGE 5,7
60900 ; AOJA 3,SH421
61000 ; AOJ 4,; ; ;LK=LK+1
61100 ; AOJ 3,
61200 ; MOVE 1,3; ; ;PN(LK)=LL+1
61300 ; AOJ 1,
61400 ; MOVEM 1,PX+1(4)
61500 ;SH321: AOJ 2, ;321 K=K+1
61600 ; CAMGE 2,LLL ; ; (L) IF(K.LT.KK)GO TO 221
61700 ; JRST SH221
61800 ; AOJ 4,
61900 ; MOVEM 4,LLL ; ; L=LK-1 ;; L=NUMBER OF ITEMS FOR RHY RECONS.
62000 ; JRA 16,(16)
62100
62200 ;SHFT1: 0 ; CALL SHFT1(KQ)
62300 ; MOVEI 2,1; ; ; -L- (KK=1)
62400 ; MOVEI 6,1; ; ; -K-
62500 ;SP: KIFIX 4,Q-1(6); ; ;220; JJ=Q(K)+3
62600 ; ADDI 4,3
62700 ; MOVEM 6,PX-1(2)
62800 ;;NEW POINTER
62900 ; MOVE Q(6); ;IF(Q(K+1).NE.2.OR.Q(K).LT.6)GO TO SPA
63000 ; CAME [2.0]
63100 ; JRST SPA
63200 ; MOVE [6.0]
63300 ; CAMLE Q-1(6)
63400 ; JRST SPA
63500 ; MOVEI 13,(4); ; JJ
63600 ; ADDI 13,(6); ; +K
63700 ; MOVE 3,Q(13); ;IF(Q(JJ+1).NE.10.OR.Q(JJ).LT.6)GO TO SPA
63800 ; CAMN 3,[10.0]
63900 ; CAMLE Q-1(13)
64000 ; JRST SPA
64100
64200 ; SKIPN IPG; ; ;IF(IPG.EQ.0)GO TO SPA
64300 ; JRST SPA; ;do next only when extracting parts(IPG.NE.0)
64400 ; SETO 3,; ; ;M=0 (-1)
64500 ; KIFIX 5,Q-1(13); ; KK=Q(JJ)+2
64600 ; ; ;DO SPB N=K,KK
64700 ; ADDI 5,2; ; KK
64800 ; MOVEI 7,(6); ; (N=K)
64900 ; ADDI 5,(7); ; (KK=K+KK+JJ-1)
65000 ; ADDI 5,(4)
65100 ;;; SOJ 5,; ; ; THE TOTAL NUM OF ITEMS TO SCRAMBLE
65200 ;SPB: MOVE Q-1(7) ;M=M+1
65300 ; AOJ 3,; ; ; M
65400 ; MOVEM XRN(3); ;SPB; RN(M)=Q(N)
65500 ; CAIGE 7,(5)
65600 ; AOJA 7,SPB
65700
65800 ; MOVEI 3,(13); ; JJ
65900 ; SUB 3,6; ; ; M=JJ-K (-1)
66000 ; MOVEI 7,(5); ; KK
66100 ; SUB 7,13; ; ; J=KK-JJ
66200 ; MOVEI 11,(7); ; KA=J
66300 ; ADDI 11,(6); ; +K
66400 ;;; SOJ 11,; ; ;KA=K+J-1
66500 ; MOVEI 12,(6); ; N=K
66600 ; MOVEI 14,(12)
66700 ; MOVE 15,XRN+3(3); ; SAVE POS (R3)
66800 ;SPC: MOVE XRN(3) ;DO SPB N=K,KA
66900 ; MOVEM Q-1(12); ; M=M+1
67000 ; AOJ 3,; ; ;SPC; Q(N)=RN(M)
67100 ; CAIGE 12,(11)
67200 ; AOJA 12,SPC
67300
67400 ; MOVEI 13,(6); ; JJ=K+J
67500 ; ADDI 13,(7); ; JJ
67600 ; SETZ 3,; ; ; M=0
67700 ; SOJ 5,; ; ; KK-1
67800 ; MOVE 7,XRN+3(3); ; POS OF THIS ITEM
67900 ; MOVEM 7,Q+2(14); ;EXCHANGE THEM
68000 ; MOVEM 15,XRN+3(3)
68100 ;SPD: MOVE XRN(3) ;DO SPD N=JJ,KK-1
68200 ; MOVEM Q(13); ; M=M+1
68300 ; AOJ 3,; ; ;SPD; Q(N)=RN(M)
68400 ; CAIGE 13,(5)
68500 ; AOJA 13,SPD; ; ALL THIS TO FIND NUM AFTER WHOLE REST.
68600 ; JRST SP; ; ;GO BACK TO GET RIGHT PNTRS NOW.
68700 ; ; ; ;K=K+JJ
68800 ;SPA: ADDI 6,(4) ; -K- (KK=KK+1)
68900 ; CAMGE 6,@(16); ; ;IF(K.LT.KQ)GO TO 220
69000 ; AOJA 2,SP
69100 ; AOJ 2, ; ; ;PN(KK)=K
69200 ; MOVEM 6,PX-1(2)
69300 ; MOVEM 2,LLL ;L=KK
69400 ; JRA 16,1(16)
69500
69600
69700 ;SHFT0: 0 ; CALL SHFT0(KQ)
69800 ; MOVE 2,LLL ; ; ; L
69900 ; MOVE 4,PTR-1(2)
70000 ; SOJ 4,
70100 ; MOVE 2,@(16); ; ; KQ
70200 ;; SETZ 3, ; K
70300 ;;SH32: MOVE XRN(3) ; DO 32 K=1,IFIX(PWDS(L))-1
70400 ;; MOVEM Q(2) ; KQ=KQ+1
70500 ;; AOJ 3,
70600 ;; CAME 3,4
70700 ;; AOJA 2,SH32
70800 ;; AOJ 2, ; 32 Q(KQ)=RN(K)
70900 ; HRLZI 3,XRN; ; PUT ADDR OF RN IN LEFT HALF
71000 ; HRRI 3,Q(2); ; ADDR OF NEXT OPEN SLOT OF Q IN RIGHT HALF
71100 ; ADDI 2,(4); ; TO LOCATE END OF TRANSFER
71200 ; BLT 3,Q(2); ; THESE REPLACE THE ';;' ABOVE
71300 ; MOVEM 2,@(16); ; ; NEW VALUE OF KQ
71400 ; MOVEI 1
71500 ; MOVEM LLL ; ; ; L
71600 ; MOVEM XXX; ; ; LK
71700 ; JRA 16,1(16)
71800
71900 ;PSHFT: 0 ; CALL PSHFT(I)
72000 ; MOVE 6,@(16)
72100 ; MOVEI 2,1
72200 ; MOVE 2,PX-1(2); ;; DO 31 NA=1,I
72300 ; MOVE 3,PX(6); ;; RN(KL)=Q(NA)
72400 ; ; ; ; 31; KL=KL+1
72500 ; MOVE 4,SF; ; ; KL
72600 ;PS31: MOVE 5,Q-1(2)
72700 ; MOVEM 5,XRN-1(4)
72800 ; AOJ 2,
72900 ; CAIE 2,(3)
73000 ; AOJA 4,PS31
73100 ; AOJ 4,
73200 ; MOVEM 4,SF; ; ; PUT BACK NEW VALUE OF KL
73300 ; JRA 16,1(16)
73400
73500 ; SUBROUTINE ADDRST(RPOS,XWDS,PN)
73600 ; COMMON /XXX/LK,LP,JY /PTR/PWDS(250),L,LL,I,IX
73700 ; COMMON RS,JA,REST,J2,RQ(18),JX,JR,LX,RDIS
73800 ; DIMENSION XWDS(1),PN(1)
73900
74000 ;ADRST: 0 ; PN(LK)=6
74100 ; MOVE 1,XXX ; LK
74200 ; MOVE 6,[6.0] ; CALL ADRST(XWDS,RR)
74300 ; MOVEM 6,Q-1(1)
74400 ; MOVE 2,[2.0] ; PN(LK+1)=2
74500 ; MOVEM 2,Q(1)
74600 ;; MOVE 13,.COMM. ; PN(LK+2)=RS
74700 ; SETZM Q+1(1)
74800 ; MOVE 3,DBX ; PN(LK+3)=RPOS-1. (DBX SAVED 'RR')
74900 ; MOVEM 3,Q+=11(1) ; SEE (LK+3) BELOW
75000 ; FSBR 3,[1.0]
75100 ; MOVEM 3,Q+2(1)
75200 ; SETZM Q+3(1) ; PN(LK+4)=0
75300 ; SETZM Q+4(1) ; PN(LK+5)=0
75400 ; SETZM Q+5(1) ; PN(LK+6)=0
75500 ; MOVEM 6,Q+6(1) ; PN(LK+7)=6.
75600 ; MOVE 10,[1.0]; PN(LK+8)=-1
75700 ; MOVNM 10,Q+7(1)
75800 ;; LK=LK+9
75900 ;; L=L+1
76000 ;; XWDS(L)=LK
76100 ;; NEXT ADDS A BAR LINE
76200 ; MOVEM 2,Q+=8(1) ; PN(LK)=2
76300 ; MOVE [4.0] ; PN(LK+1)=4
76400 ; MOVEM Q+=9(1)
76500 ;;; MOVEM 13,PX+=10(1) ; PN(LK+2)=RS
76600 ; SETZM Q+=10(1)
76700 ;; PN(LK+3)=RPOS (SEE ABOVE)
76800 ; MOVE 10,@1(16) ;GET BAR LINE INFO
76900 ; MOVEM 10,Q+=12(1) ; PN(LK+4)=RR
77000 ; MOVE 2,LLL ; L
77100 ; HRRZI 3,@(16) ; ADDR OF XWDS
77200 ; ADDI 3,(2)
77300 ; ADDI 1,=9
77400 ; MOVE 4,1
77500 ; MOVEM 4,(3) ;XWDS(L)=LK
77600 ; ADDI 4,5
77700 ; MOVEM 4,1(3) ;XWDS(L+1)=LK
77800 ; ADDI 2,2
77900 ; MOVEM 2,LLL ;L=L+2
78000 ; ADDI 1,5
78100 ; MOVEM 1,XXX ;LK=LK+14
78200 ; JRA 16,2(16)
78300 ;
78400 ;STAFF: 0 ; SUBROUTINE STAFF(P0,P1, P3,P4,P5,P6,P7,P8)
78500 ;;; COMMON/XRN/RN(2000) /SF/KL,RT,KP,RSTJ2,NAMX
78600 ;;; COMMON /PTR/PWDS(250),L,LL,I,IX
78700 ; MOVE 2,SF+2 ; KP PWDS(KP)=KL
78800 ; MOVE 4,SF ; KL
78900 ; MOVEI 3,(4)
79000 ; MOVEM 3,PTR-1(2)
79100 ; AOJ 2, ; KP=KP+1
79200 ; MOVEM 2,SF+2
79300 ; MOVE 2,@(16) ; RN(KL)=P0
79400 ; MOVEM 2,XRN-1(4)
79500 ; MOVE @1(16) ; RN(KL+1)=P1
79600 ; MOVEM XRN(4)
79700 ; MOVE SF+1 ; RN(KL+2)=RT
79800 ; MOVEM XRN+1(4)
79900 ; MOVE @2(16) ; RN(KL+3)=P3
80000 ; MOVEM XRN+2(4)
80100 ; MOVE @3(16) ; RN(KL+4)=P4
80200 ; MOVEM XRN+3(4)
80300 ; MOVE @4(16) ; RN(KL+5)=P5
80400 ; MOVEM XRN+4(4)
80500 ; CAMGE 2,[4.0] ; IF(P0.LT.4.)GO TO 1
80600 ; JRST ST1
80700 ; MOVE @5(16) ; RN(KL+6)=P6
80800 ; MOVEM XRN+5(4)
80900 ; MOVE @6(16) ; RN(KL+7)=P7
81000 ; MOVEM XRN+6(4)
81100 ; MOVE @7(16) ; RN(KL+8)=P8
81200 ; MOVEM XRN+7(4)
81300 ; MOVE @=8(16) ; RN(KL+9)=P9
81400 ; MOVEM XRN+=8(4)
81500 ; MOVE @=9(16) ; RN(KL+10)=P10
81600 ; MOVEM XRN+=9(4)
81700 ; MOVE @=10(16) ; RN(KL+11)=P11
81800 ; MOVEM XRN+=10(4)
81900 ; MOVE @=11(16) ; RN(KL+12)=P12
82000 ; MOVEM XRN+=11(4)
82100 ;ST1: KIFIX 2,2 ;1 KL=KL+P0+3.
82200 ; ADDI 2,3
82300 ; ADDM 2,SF
82400 ; JRA 16,=12(16) ; END
82500
82600 ;;;RIGHT: 0 ; FUNCTION RIGHT(NA,J)
82700 ;; COMMON /PX/PN(1800) /Q/Q(9000)
82800 ;;; MOVE 4,@(16) ; NA K=NA+J
82900 ;;; ADD 4,@1(16) ; +J J IS EITHER +1 OR -1
83000 ;;; MOVE 5,[16.0]
83100 ;;;RT1: MOVE 3,PX-1(4) ; 1 L=PN(K)
83200 ;; MOVE Q(3) ; IF(Q(L+1).NE.16)GO TO 2
83300 ;; CAME [16.0] ; **** CAN'T USE AC2 - USED IN FORTRAN
83400 ;;; CAME 5,Q(3)
83500 ;;; JRST RT2
83600 ;;; ADD 4,@1(16) ; K=K+J
83700 ;;; JRST RT1 ; GO TO 1
83800 ;;;RT2: MOVE Q+2(3) ; 2 RIGHT=Q(L+3)
83900 ;;; JRA 16,2(16) ; END
84000 ;RIGHT: 0 ;FUNCTION RIGHT(NA,J,JK)
84100 ; MOVE 4,@(16)
84200 ; MOVE 6,4
84300 ; MOVE 11,@1(16) ; SAVE J IN 11
84400 ; ADD 4,11 ; K=NA+J J= +1 OR -1
84500 ; SKIPLE 4 ; IF(K.GT.0)GO TO RT4
84600 ; JRST RT4
84700 ; MOVE 0,Q+3 ;RIGHT=Q(JK+3)
84800 ; JRA 16,3(16) ;RETURN
84900 ;RT4: MOVEI 5,Q ; Q R=Q(JK+2)
85000 ; ADD 5,@2(16)
85100 ; MOVE 12,2(5) ; RX=Q(JK+3)-2 CURRENT POS. OF REST-2
85200 ;;;; FSBR 12,[2.0] ; NEEDED IF NOTHING FOUND TO LEFT.
85300 ; MOVE 5,1(5) ;R THE STAFF NUM.
85400 ; MOVEI 8,1 ;JX=1 FOR REVERSE LOOP
85500 ; SKIPL @1(16) ;IF(J.GT.0)JX=I FORWARD LOOP
85600 ; MOVE 8,LLL+2
85700 ;RT1: JSA 16,CODEN ; DO 134 K=NA-1,1,-1
85800 ; JUMP PX ; R8=CODEN(KPN,K,Q,LL)
85900 ; JUMP 4
86000 ; JUMP Q
86100 ; JUMP 7 ;LL
86200 ; CAMN 0,[4.0] ; IF(R8.EQ.4)GO TO 234
86300 ; JRST RT2
86400 ; MOVE 3,Q+1(7) ; IF(Q(LL+2).NE.R)GO TO 134
86500 ; CAME 3,5
86600 ; JRST RT3
86700 ; CAME 0,[18.0] ; IF(R8.EQ.18.OR.R8.EQ.17)GO TO 234
86800 ; CAMN 0,[17.0] ; JUMP ON KEY SIG OR METER
86900 ; JRST RT2
87000 ;;; CAML 0,[10.0] ; IF(R8.GE.10)GO TO 134
87100 ;;; JRST RT3
87200 ;;; CAME 0,[3.0] ; IF(R8.NE.3)GO TO 234
87300 ;;; JRST RT2
87400 ;RT3: CAMN 4,8 ;134 CONTINUE
87500 ; JRST .+3
87600 ; ADD 4,11
87700 ; JRST RT1
87800 ; SKIPG 11 ;SKIP NEXT IF GOING FORWARD IN LOOP (LOOKING TO RIGHT)
87900 ; MOVE 0,12 ;USE ITS OWN POS.-2 IF NOTHING FOUND TO LEFT
88000 ; SKIPA ; RR=RX
88100 ;RT2: MOVE 0,Q+2(7) ; C NOW FOUND ITEM TO LEFT OR RT ON THIS STAFF.
88200 ; JRA 16,3(16) ;234 RR=Q(LL+3)
88300
88400 ;RESTS: 0 ;XLFT=0 -- CALL RESTS
88500 ; SETZ 2,
88600 ; MOVE 12,[4.0]
88700 ;
88800 ; MOVE 13,[16.0] ; TO CATCH WORDS
88900 ; MOVN 3,[99.0] ;SIG=-99
89000 ;;; MOVE 4,3 ;CLEF=-99
89100 ; SETZ 6, ; REST=0
89200 ; MOVEI 7,1 ;K=1
89300 ;RX50: MOVE 10,PX-1(7) ;50 JL=PN(K)
89400 ; MOVE 11,Q(10) ;R=Q(JL+1)
89500 ; JUMPN 2,RX5 ;IF(XLFT.NE.0)GO TO 5
89600 ; CAMLE 11,[4.0] ;IF(R.LE.4)XLFT=Q(JL+3)
89700 ; JRST RX5
89800 ; MOVE 2,Q+2(10)
89900 ; MOVEM 2,.COMM.+=13
90000 ; JRST RX3
90100 ;RX5: CAME 11,[17.0] ;5 IF(R.NE.17)GO TO 3
90200 ; JRST RX3
90300 ; MOVE 1,Q+4(10) ;IF(Q(JL+5).EQ.SIG)GO TO 60
90400 ; CAMN 1,3
90500 ; JRST RX60
90600 ; MOVE 3,1 ;SIG=Q(JL+5)
90700 ;RX3: CAME 11,[2.0] ;3 IF(R.NE.2)GO TO 231
90800 ; JRST RX231
90900 ; MOVE Q-1(10) ;IF(Q(JL).GE.6)GO TO 7
91000 ; CAML [6.0]
91100 ; JRST RX7
91200 ;
91300 ; JRST RX231 ;NEXT (TO RX7) DOESN'T WORK YET. NEEDS TO EXPND DATA!
91400 ;; MOVE 1,PX-2(7) ;IF(Q(KPN(K-1))+1).NE.4)GO TO 231
91500 ;; CAMN 12,Q(1)
91600 ;; JRST RX55 ; ANY REST BETWEEN 2 BARS IS A "WHOLE" REST.
91700 ;; CAME 13,Q(1)
91800 ;; JRST RX231 ; IF NOT WORDS, JUMP
91900 ;; MOVE 14,PX-3(7)
92000 ;; CAME 12,Q(14) ; IS THIS ONE A BAR?
92100 ;; JRST RX231 ; NO
92200 ; WON'T CATCH IT IF THERE IS A CLEF, METER, ETC. PRESENT
92300 ;;RX55: MOVE 1,PX(7) ;IF(Q(KPN(K+1))+1).NE.4)GO TO 231
92400 ;; CAME 12,Q(1)
92500 ;; JRST RX231
92600 ; FOUND A WHOLE REST MEAS.
92700
92800 ;;RX8: MOVE 11,[3.0] ;Q(JR)=3 (P7=3)
92900 ;; MOVE 13,PX-1(7) ;JR=JL+7
93000 ;; ADDI 13,6
93100 ;; CAMLE 12,Q(13) ;IF(Q(JR+1).GT.4)GO TO RX9
93200 ;; JRST RX9
93300 ;; MOVNM 11,Q-3(13) ;Q(JR-2)=-3 P5=-3 =DBL WHOLE REST
93400 ;; MOVE [8.0] ;IF(R.LT.8)GO TO RX9
93500 ;; CAMGE Q(13)
93600 ;; JRST RX9
93700 ;; MOVE 11,Q(13) ;Q(JR-1)=IFIX(R/4.0)+2.0
93800 ;; FDVR 11,12
93900 ;; KIFIX 11,11
94000 ;; FLTR 11,11
94100 ;; FADR 11,[2.0]
94200 ;;RX9: MOVEM 11,Q(13)
94300 ;; JRA 16,(16) ;RETURN
94400
94500 ;RX7: MOVN Q+7(10) ;IF(Q(JL+8).LE.-4)GO TO 231
94600 ; SKIPLE Q+6(10) ;IF(Q(JL+7).LE.0)GO TO 231 (IGNORE NON-RHYTH.)
94700 ; CAML [4.0] ;CATCH BAR REPEAT SIGN
94800 ; JRST RX231
94900 ; JUMPE RX231 ;IF(Q(JL+8).EQ.0)GO TO 231 (WHOLE REST OVER CUE NOTES)
95000 ; JUMPN 6,RX6 ;7 IF(REST.NE.0)GO TO 6
95100 ; MOVEI 13,(10) ;JR=JL+8
95200 ; ADDI 13,6
95300 ;; POINTER TO REST NUM.
95400 ; MOVE 11,Q(13) ;R=Q(JR-1)
95500 ; CAMGE 11,[5.0] ;IF(R.LT.5)R=5
95600 ; MOVE 11,[5.0]
95700 ; FMPR 11,[0.6] ;Q(JR-1)=R*.6
95800 ; MOVEM 11,Q(13)
95900 ;; REDUCE SIZE OF REST'S TIME SO IT WILL TAKE LESS SPACE.
96000 ;RX6: FADR 6,[1.0] ;6 REST=REST+1
96100 ; MOVEM 6,Q+1(13) ;Q(JR)=REST
96200 ; MOVN [2.0]
96300 ; MOVEM Q-3(13) ;Q(JR-4)=-2 (LOWER THE REST'S POS.)
96400 ; MOVEI 10,(7) ;JL=K+2
96500 ; ADDI 10,2
96600 ; CAML 10,LLL ;IF(JL.GE.L)RETURN
96700 ; JRA 16,(16)
96800 ; MOVE 14,PX-1(10) ;LB=KPN(JL)
96900 ; MOVE Q(14) ;IF(Q(LB+1).NE.2)GO TO 233
97000 ; CAME [2.0]
97100 ; JRST RX233 ; NEXT IS TO COMBINE MEASURES OF REST
97200 ; MOVE Q-1(14) ;IF(Q(LB).LT.6)GO TO 233
97300 ; CAMGE [6.0]
97400 ; JRST RX233
97500 ;; SKIP NON-WHOLE RESTS
97600 ; MOVE 15,PX-2(10) ;N=KPN(JL-1)
97700 ;;; MOVE Q(15) ;IF(Q(N+1).NE.4)GO TO 233
97800 ; CAME 12,Q(15)
97900 ; JRST RX233
98000 ;; IS REST FOLLOWED BY A BAR? OR RHRSL NUM?(COULD BE A PROB. HERE!!!)
98100 ;; SO IT WON'T BE FOUND NEXT TIME AROUND.
98200 ; MOVN [1.0] ;Q(LB+1)=-1
98300 ; MOVEM Q(14) ; CHANGE CODE #
98400 ; MOVEM Q(15) ;Q(N+1)=-1
98500 ; MOVEI 7,(10) ;K=JL
98600 ; JRST RX6 ;GO TO 6
98700 ;RX60: MOVE [1.0] ;60 Q(JL+1)=-1
98800 ; MOVNM Q(10)
98900 ; JRST RX231 ;GO TO 231
99000 ;RX233: SETZ 6, ;233 REST=0
99100 ;RX231: AOJ 7, ;231 K=K+1
99200 ; CAMGE 7,LLL ;IF(K.LT.L)GO TO 50
99300 ; JRST RX50
99400 ; JRA 16,(16) ; END
00100 ;EXCHG: 0 ;CALL EXCHG(MM(J),NN(J))
00200 ; HRRZI 1,@(16) ; ADDR OF MM(J)
00300 ; MOVE 2,1(1) ;VALUE OF MM(J+1)
00400 ; EXCH 2,@(16) ;EXCHANGE
00500 ; MOVEM 2,1(1) ; MM(J+1)
00600 ; HRRZI 1,@1(16) ; ADDR OF NN(J)
00700 ; MOVE 2,1(1) ;VALUE OF NN(J+1)
00800 ; EXCH 2,@1(16) ;EXCHANGE
00900 ; MOVEM 2,1(1) ; NN(J+1)
01000 ; JRA 16,2(16)
01100 ;
01200 ;EXCH: 0
01300 ; MOVE @(16)
01400 ; EXCH @1(16)
01500 ; MOVEM @(16)
01600 ; JRA 16,2(16)
01700 ;
01800 ;INMUS: 0 ;CALL INMUS(NAME,EXT,RN,KWDS,RSTFAC)
01900 ; MOVE 1,@(16)
02000 ; MOVE 2,@1(16)
02100 ; JSA 16,GETEXT
02200 ; JUMP 1 ;NAME
02300 ; JUMP 2 ;EXT
02400 ; MOVE 11,4(16) ;LOC OF RSTFAC ARRAY
02500 ; MOVE 12,3(16) ;LOC OF KWDS ARRAY
02600 ; JSA 16,EXTIN ;ACCEPT 2,NAM
02700 ; JUMP @11 ; CALL GETEXT(NAM,'MS')
02800 ; JUMP [=20] ;READ ONLY 20 WDS IN PAGE ONLY****** NOT [=128]
02900 ; MOVE 15,2(16) ;LOC OF RN ARRAY
03000 ;I1: JSA 16,EXTIN ;CALL EXTIN(R,JJ)
03100 ; JUMP @15 ;JUMP @R
03200 ; JUMP =18(11) ;WDS ;THE WD CNT.
03300 ; MOVE @15 ;@R ;IF(R(1).NE.INTEGER 1)GO TO I3
03400 ; CAIE 1 ;OLD FORMAT ?
03500 ; JRST I3 ;NO
03600 ; USETI 12,2 ;YES, READ 2ND RECORD AGAIN (12 =CH)
03700 ; JSA 16,EXTIN ;CALL EXTIN(RS,128)
03800 ; JUMP @12 ;JUMP @KW
03900 ; JUMP =17(11) ;JUMP NWDS ;CALL EXTIN(K,J)
04000 ; JRST I1 ;GO BACK AND GET R ARRAY
04100 ;I3: MOVEI 1,1 ;3 N=1 ;KK(NN)=N
04200 ; MOVEM 1,(12) ;K(1)=1
04300 ; MOVEI 5,1
04400 ;I4: ADD 15,5 ;4 N=N+R(N)+3 HERE'S THE LOOP
04500 ; KIFIX 5,-1(15) ;GET WD CNT -2
04600 ;;; SKIPG 5 ;LEAVE IF NUM. IS .LE.0
04700 ;;; JRA 16,5(16)
04800 ;I5: ADDI 5,3 ;NN=NN+1
04900 ; ADD 1,5
05000 ; AOJ 12, ;UPDATE THE COUNTER OF THE POINTER LIST
05100 ; MOVEM 1,(12) ;KK(NN)=N
05200 ; CAMGE 1,=18(11) ;IF(N.LT.JJ)GO TO 4
05300 ; JRST I4
05400 ; JRA 16,5(16)
00100 ;RCURVE: 0 ; R7=RCURVE(R3)
00200 ; MOVEI 2,@(16) ; R7=2.0+(R6-R3)/25.+ABS(R4-R5)/10.
00300 ; MOVE 1,3(2)
00400 ; FSBR 1,(2) ;R6-R3
00500 ; MOVE 3,5(2) ;IF(R8.LT.-1)Z=Z+R8*2.
00600 ; FADR 3,[1.0]
00700 ; JUMPGE 3,RCRV ;R8=-2=BETWEEN NOTES, =-3=1ST NOTE IS DOTTED.
00800 ; FADR 3,3
00900 ; FADR 1,3
01000 ;RCRV: FDVR 1,[25.0] ; /25.
01100 ; MOVE 0,2(2)
01200 ; FSBR 0,1(2) ;R5-R4
01300 ; MOVMS ;ABSOLUTE VALUE
01400 ; FDVR 0,[10.0] ; /10.
01500 ; FADR 0,1
01600 ; FADR 0,[2.0] ; +2.0 (THIS IS + .9 IN MS)
01700 ; SKIPGE 4(2) ;IF(R7 WAS .LT.0)KEEP IT NEGATIVE.
01800 ; MOVNS
01900 ; JRA 16,1(16)
02000 ;
02100 ;SHRNK: 0 ;CALL SHRNK(K,IT)
02200 ; MOVE 10,@1(16)
02300 ; MOVE 11,PX(10) ;END OF Q DATA
02400 ; SOJ 10,
02500 ; MOVE 2,@(16) ;K
02600 ; MOVEI 12,(2)
02700 ; MOVE 3,PX-1(2) ;PTR TO Q(n)
02800 ; MOVEI 6,(3) ;SAME
02900 ; MOVE 13,Q+2(3) ;POS. OF CLEF TO BE REMOVED.
03000 ; MOVE 4,PX(2) ;PTR TO NEXT ITEM
03100 ; MOVEI 1,(4) ;TO USE IN BLT
03200 ; SUBI 3,(4) ;WDCCNT OF DELETE ITEM
03300 ; SUB 4,PX+1(2) ; NEXT +1
03400 ; SUB 3,4 ; AMOUNT OF CHANGE
03500 ;SK: MOVE 5,PX+1(2)
03600 ; SUB 5,PX(2)
03700 ; ADD 5,PX-1(2)
03800 ; MOVEM 5,PX(2)
03900 ; CAIE 2,(10)
04000 ; AOJA 2,SK
04100 ; MOVE 2,PX(2) ; LAST PTR
04200 ; MOVE 7,Q+2(6) ;POS FOR LATER "MOVE"
04300 ;SK2: MOVE Q-1(1)
04400 ; MOVEM Q-1(6)
04500 ; AOJ 1,
04600 ; CAIE 1,(11)
04700 ; AOJA 6,SK2
04800 ; MOVEM 10,@1(16)
04900 ; MOVEM 10,LLL+2 ;I=LEND (FOR FINAL ENDPOINT)
05000 ;;; AOJ 10, ; TO GET TO END OF DATA.
05100 ; MOVEM 7,.COMM.+5 ;R4
05200 ;SKMV: SETZM LLL+1 ;LL=0 (NO JUSTIFY)
05300 ; MOVE 2,[200.0]
05400 ; MOVEM 2,.COMM.+6 ;R5
05500 ; SETZM .COMM. ;RS
05600 ; MOVEM 2,.COMM.+=10 ;R9=R5
05700 ; SETZM .COMM.+=8 ;R7
05800 ; MOVEM 13,.COMM.+=9 ;R8=EXPAND REMAINDER OF LINE TO CLEF POS.
05900 ; JSA 16,PTMOVE
06000 ; JUMP Q
06100 ; JUMP PX-1(12)
06200 ; JRA 16,2(16)
06300
06400 ;EXPND: 0 ; TO SHIFT LINE TO RT. WHEN ADDING KSIG.
06500 ; MOVE 5,[5.0]
06600 ; MOVE 2,[7.1]
06700 ; FMPR 2,STF+=8
06800 ; MOVEM 2,.COMM.+5 ;R4=7*RSTJ2+.1
06900 ; MOVE 12,@(16) ; GET PTR TO PX
07000 ; ADDI 12,2 ; ADD 2 (FOR NOW, ANYWAY)
07100 ; SETZM .COMM.+=9
07200 ; JRST SKMV ; GO MOVE IT
07300
07400 ;CLFNUM:; 0; ;X=CLFNUM(Q,PX,MS) (FUNCTION)
07500 ; MOVEI 2,@1(16); ;GET PX'S ADDR
07600 ; ADD 2,@2(16)
07700 ; MOVE 2,(2); ;PX(MS)
07800 ; MOVEI 1,@(16); ; ADDR OF Q
07900 ; ADD 2,1; ; ;ADDR OF Q(PX(MS)+1)
08000 ; MOVE 5(2); ;X=Q(PX(MS)+5)
08100 ; MOVE 1,-1(2)
08200 ; CAMGE 1,[3.0]; ;IF (Q( ).LT.3)X=0
08300 ; SETZ; ; ; ANSWER IN AC0
08400 ; JRA 16,3(16)
08500
08600 ;SLRV:; 0; ; ; CALL SLRV(KK,C)
08700 ; MOVE 1,@(16); ; KK
08800 ; MOVE 2,@1(16); ; C
08900 ; FADRM 2,Q+3(1); ; WORKS WITH Q ARRAY ONLY******
09000 ; FADRM 2,Q+4(1); ; FOR Q(KK+4) AND (KK+5)
09100 ; MOVNS Q+6(1); ; Q(KK+7)
09200 ; JRA 16,2(16)
09300
09400 ;CLEFN:; 0
09500 ; MOVEI 3,@(16); ; ;FUNCTION CLEFN(Q,J)
09600 ; ADD 3,@1(16); ;Q(J+1) NOW
09700 ; MOVE 2,-1(3); ; ;IF(Q(J).LT.3)RR=0
09800 ; SETZ 0,
09900 ; CAML 2,[3.0]
10000 ; MOVE 0,4(3)
10100 ; JRA 16,2(16)
10200 ;; CAMGE 0,[100.0]
10300 ;; JRA 16,2(16); ; ;IF(Q(J+5).LT.100)RR=Q(J+5)
10400 ;; JSA 16,AMOD
10500 ;; JUMP 4(3); ; ;ELSE RR=AMOD(Q(J+5),100.0)
10600
10700 ;MMNN:; 0; ; ; ;CALL MMNN(K)
10800 ; MOVEI 2,1; ; ;N=N+1
10900 ; ADDB 2,JN+1; ; ;NN(N)=0
11000 ;;;;; SETZM XRN+=499(2)
11100 ; MOVE @(16); ;
11200 ; CAIE 0,3; ; ;IF(K.NE.3)NN(N)=-1 FOR SECONDARY POSITIONS.
11300 ; SETOM XRN+=499(2)
11400 ; ADD JN; ; ; ;MM(N)=J+K
11500 ; MOVEM XRN-1(2)
11600 ; JRA 16,1(16)
11700
11800 ;CODEN:; 0; ; ;FUNCTION CODEN(K,N,R,M)
11900 ; MOVE 1,@1(16); ;PNTR TO K ARRAY
12000 ; SOJ 1,
12100 ; ADDI 1,@(16); ;ADD LOC OF K ARRAY
12200 ; MOVE 1,(1); ;GET PNTR TO R ARRAY
12300 ; MOVEM 1,@3(16); ;SEND IT BACK IN M
12400 ; ADDI 1,@2(16); ;ADD LOC OF R ARRAY
12500 ; MOVE (1); ;R(M+1) (CODE NUM OF ITEM)
12600 ; JRA 16,4(16)
12700 ;
12800 ;ZERO:; 0 ; ; ;FUNCTION ZERO(X,Y)
12900 ; MOVE @(16); ;ZERO=X-Y
13000 ; FSBR @1(16)
13100 ; SKIPGE ; ;IF(ABS(ZERO).LT..01)ZERO=0
13200 ; MOVNS
13300 ; CAMG 0,[0.01]
13400 ; SETZ 0,
13500 ; JRA 16,2(16); ;END
13600
13700 ; DO NEXT IF MORE THAN 1 STAFF(KPG) AND DIFF. SIZE FACTORS ARE FOUND.
13800 ;BARFAC:; 0; ; ;CALL BARFAC(KPG,BFAC,JK) R=RSTFAC(1)
13900 ; MOVE 10,STF; ; DO 5112 K=2,KPG
14000 ; MOVEI 2,1
14100 ;BA:; CAME 10,STF(2); ;5112; IF(R.NE.RSTFAC(K))GO TO 6112
14200 ; JRST BB
14300 ; AOJ 2,;
14400 ; CAML 2,@(16)
14500 ; JRA 16,3(16); ; GO TO 3112 -- RETURN
14600 ; JRST BA
14700 ; NEXT TO FIND PROBABLE SIZE FACTOR FOR THIS BAR. (NOT FOR PARTS)
14800 ; FIND LINE WITH MOST ACTIVITY.
14900 ; ALL THIS SORT OF WORKS. SOMEDAY REVIEW IT.********
15000 ;BB:; MOVEI 2,7; ;6112; DO 1112 K=1,8
15100 ;BC:; SETZM XRN(2)
15200 ; SOJGE 2,BC; ;1112; RN(K)=0
15300 ; MOVE 2,@2(16); ; DO 112 K=JK,J-1
15400 ; MOVE 7,[7.0]
15500 ;;; MOVE 5,[5.0];;;;; WE COUNT ALL RESTS, EVEN WITH NO RHYTHM.
15600 ;BD:; MOVEM 2,KBD#; ;'KBD' WILL BE 'K'
15700 ; JSA 16,CODEN; ; R=CODEN(KPN,K,Q,JD)
15800 ; JUMP PX; ; ; /PX/ IS KPN
15900 ; JUMP KBD ; ; 'K'
16000 ; JUMP Q
16100 ; JUMP JD# ; ; 'JD'
16200 ; CAMLE [3.0] ; ;; IF(R.GT.3.)GO TO 112
16300 ; JRST B112
16400 ; MOVE 4,[1.0]; ;; A=1.0
16500 ; CAMN [2.0]; ; CHECKS FOR NUMBER OF NOTES, RESTS, CLEFS.
16600 ; MOVE 4,[0.6]; ;AC0 IS R IF(R.EQ.2)A=0.6
16700 ; SKIP NON-RHYTHM CHORD NOTES. RESTS ARE CONSIDERED LESS IMPORTANT.
16800 ; MOVE 11,JD ; ; GET POINTER TO ITEM IN Q ARRAY
16900 ; CAME [1.0]; ; IF(R.NE.1)GO TO 4112
17000 ; JRST B4112
17100 ; CAMG 7,Q-1(11); ; IF(Q(JD).LT.7)GO TO 112
17200 ; SKIPG Q+8(11); ; IF(Q(JD+9).LE.0)GO TO 112
17300 ; JRST B112
17400 ;B4112:; KIFIX 12,Q+1(11); ;4112; LF=Q(JD+2)+1
17500 ; FADRM 4,XRN(12); ; RN(LF)=RN(LF)+A
17600 ;B112:; AOJ 2,; ; ; ;112; CONTINUE
17700 ; CAMGE 2,JN; ; ;/JN/ IS J
17800 ; JRST BD
17900 ; SETZ 2, ; ; ;; JD=1
18000 ; MOVE 3,XRN; ; ; B=RN(1)*RSTFAC(1)
18100 ; FMPR 3,STF
18200 ; MOVEI 4,1; ; ; ; DO 2112 K=2,KPG
18300 ;BE:; MOVE 5,XRN(4); ; ; A=RN(K)*RSTFAC(K)
18400 ; FMPR 5,STF(4)
18500 ; CAMG 5,3; ; ; ; IF(A.LE.B)GO TO 2112
18600 ; JRST B2112
18700 ; MOVE 2,4; ; ; (-1) JD=K
18800 ; MOVE 3,5; ; ; B=A
18900 ;B2112:; AOJ 4,; ; ; ;2112; CONTINUE
19000 ; CAME 4,@(16)
19100 ; JRST BE
19200 ; MOVE 2,STF(2); ; ; BFAC=BFAC*(RSTFAC(JD)+.1)
19300 ; FADR 2,[0.1]; ; +.1 ABOVE TO MINIMIZE DIFF. IN SIZE FACTOR.
19400 ; FMPRM 2,@1(16)
19500 ; JRA 16,2(16); ; ;RETURN
19600
19700 ; WRITES AND READS DUMP MODE FILES WITH ANY EXTENSION.
19800 CH3←12
19900 CH2←11
20000 BLKS←←=1
20100
20200 ;CALL PUTEXT(<FILE>,<EXT>)
20300
20400 PUTEXT: 0 ;USES EXTOUT,FINEXT, CH2
20500 MOVE 0,@0(16)
20600 MOVEM 0,FILNAM
20700 MOVE 0,@1(16)
20800 MOVEM 0,EXTNAM
20900 JSA 16,INTFIL
21000 SETZM DIR+2
21100 SETZM DIR+3
21200 ENTER CH2,DIR
21300 ERROR <ENTER FAILED>
21400 JRA 16,2(16)
21500
21600 ;CALL EXTOUT(<ARRAY>,<NO. OF WORDS>)
21700
21800 EXTOUT: 0
21900 HRRZI 0,@0(16)
22000 SUBI 0,1
22100 MOVEM 0,COM
22200 MOVN 0,@1(16)
22300 HRLM 0,COM
22400 OUTPUT CH2,COM
22500 STATZ CH2,740000
22600 ERROR <WRITE ERROR>
22700 JRA 16,2(16)
22800
22900
23000 INTFIL: 0 ;INITS DSK
23100 MOVEI REGS
23200 BLT REGS+3
23300 INIT CH2,17
23400 SIXBIT/DSK/
23500 0
23600 ERROR <CAN'T INIT DSK!>
23700 EXTF4: PUSHJ 17,INTF4
23800 ;NEXT IS NEAR TOP OF FILE.********
23900 ;INTF4: MOVE 0,FILNAM#
24000 ; MOVEM 0,FN#
24100 ; MOVE 1,[POINT 7,FN]
24200 ;INTF3: MOVE 2,[POINT 6,DIR]
24300 ; SETZM DIR
24400 ; MOVEI 3,5
24500 ;INTF1: ILDB 0,1
24600 ; CAIN 0," "
24700 ; JRST INTF2
24800 ; SUBI 0,40
24900 ; IDPB 0,2
25000 ; SOJG 3,INTF1
25100 ;INTF2: HRLZI REGS
25200 ; BLT 3
25300 MOVE 0,EXTNAM#
25400 MOVEM 0,EX#
25500 MOVE 1,[POINT 7,EX]
25600 EXTF3: MOVE 2,[POINT 6,DIR+1]
25700 SETZM DIR+1
25800 MOVEI 3,5
25900 EXTF1: ILDB 0,1
26000 CAIN 0," "
26100 JRST EXTF2
26200 SUBI 0,40
26300 IDPB 0,2
26400 SOJG 3,EXTF1
26500 EXTF2: HRLZI REGS
26600 BLT 3
26700 JRA 16,0(16)
26800
26900
27000 COM: OCT 0,0
27100 COM1: 0
27200 BLKNUM: 0
27300
27400 ;CALL FINEXT
27500 FINEXT: 0
27600 CLOSE CH2,0
27700 STATZ CH2,740000
27800 ERROR <ERROR AFTER CLOSE>
27900 RELEASE CH2,0
28000 JRA 16,0(16)
28100
28200 ;CALL GETEXT(<FILE>,<EXT>)
28300
28400 GETEXT: 0
28500 MOVE 0,@0(16)
28600 MOVEM 0,FILNAM
28700 MOVE 0,@1(16)
28800 MOVEM 0,EXTNAM
28900 JSA 16,INTFIZ
29000 SETZM DIR+3
29100 SETZM DIR+2
29200 LOOKUP CH3,DIR
29300 ERROR <LOOKUP FAILED>
29400 JRA 16,2(16)
29500
29600
29700 INTFIZ: 0 ;INITS DSK FOR INPUT
29800 MOVEI REGS
29900 BLT REGS+3
30000 INIT CH3,17
30100 SIXBIT/DSK/
30200 0
30300 ERROR <CAN'T INIT DSK!>
30400 JRST EXTF4
30500
30600
30700 ;CALL FASTI2(<ARRAY>,<NO. WORDS>)
30800
30900 EXTIN: 0
31000 HRRZI 0,@0(16)
31100 SUBI 0,1
31200 MOVEM 0,COM
31300 MOVN 0,@1(16)
31400 HRLM 0,COM
31500 INPUT CH3,COM
31600 STATZ CH3,740000
31700 0
31800 JRA 16,2(16)
31900
32000 END